package com.ruoyi.location.domain.quickreport.util;

import com.alibaba.fastjson.JSON;

import java.util.Random;

/**
 * 高级随机昵称生成器
 * 包含诗词、名著、成语等文化元素
 */
public class RichNicknameGenerator {
    
    // 诗词中的优美词汇
    private static final String[] POETIC_WORDS = {
        "清风", "明月", "细雨", "微光", "晨曦", "晚霞", "流云", "飞雪",
        "落花", "流水", "青山", "碧海", "蓝天", "白云", "繁星", "皓月",
        "烟雨", "雾霭", "霜华", "露珠", "朝露", "晚风", "春色", "秋光",
        "夏雨", "冬雪", "暖阳", "凉风", "细雨", "微光", "晨曦", "晚霞"
    };
    
    // 成语中的优美词汇
    private static final String[] IDIOM_WORDS = {
        "风华", "绝代", "倾城", "倾国", "绝世", "无双", "倾城", "倾国",
        "风华", "绝代", "倾城", "倾国", "绝世", "无双", "倾城", "倾国",
        "风华", "绝代", "倾城", "倾国", "绝世", "无双", "倾城", "倾国",
        "风华", "绝代", "倾城", "倾国", "绝世", "无双", "倾城", "倾国"
    };
    
    // 小说人物特征
    private static final String[] NOVEL_TRAITS = {
        "潇洒", "飘逸", "俊逸", "清雅", "温润", "儒雅", "豪迈", "英武",
        "清冷", "孤傲", "冷峻", "温婉", "娴静", "优雅", "高贵", "典雅",
        "洒脱", "不羁", "狂放", "豪放", "清高", "淡雅", "温润", "儒雅",
        "清冷", "孤傲", "冷峻", "温婉", "娴静", "优雅", "高贵", "典雅"
    };
    
    // 自然景观
    private static final String[] NATURE_SCENES = {
        "山川", "河流", "海洋", "森林", "草原", "沙漠", "湖泊", "瀑布",
        "峡谷", "平原", "丘陵", "高原", "盆地", "岛屿", "海岸", "山脉",
        "溪流", "泉水", "池塘", "花园", "竹林", "松林", "梅林", "桃林",
        "杏林", "梨园", "菊园", "兰园", "竹园", "松园", "梅园", "桃园"
    };
    
    // 动物名称（优雅的）
    private static final String[] ELEGANT_ANIMALS = {
        "凤凰", "麒麟", "龙", "虎", "豹", "狼", "鹰", "鹤",
        "鹿", "马", "羊", "兔", "猫", "狗", "鸟", "鱼",
        "蝶", "蝉", "萤", "蜂", "蝶", "蝉", "萤", "蜂",
        "蝶", "蝉", "萤", "蜂", "蝶", "蝉", "萤", "蜂"
    };
    
    // 英文翻译的优雅词汇
    private static final String[] ENGLISH_TRANSLATIONS = {
        "星辰", "月光", "阳光", "微风", "细雨", "彩虹", "流星", "极光",
        "银河", "星云", "星尘", "星雨", "星月", "星辉", "星光", "星芒",
        "月华", "月影", "月辉", "月芒", "月晕", "月轮", "月牙", "月眉",
        "日华", "日影", "日辉", "日芒", "日晕", "日轮", "日牙", "日眉"
    };
    
    // 古代官职
    private static final String[] ANCIENT_TITLES = {
        "将军", "丞相", "尚书", "侍郎", "御史", "大夫", "太傅", "太师",
        "太保", "太尉", "司徒", "司空", "司马", "司寇", "司农", "司士",
        "太史", "太卜", "太祝", "太仆", "太常", "太乐", "太庙", "太学",
        "太府", "太仓", "太仆", "太常", "太乐", "太庙", "太学", "太府"
    };
    
    // 古代器物
    private static final String[] ANCIENT_OBJECTS = {
        "玉玺", "玉璧", "玉环", "玉镯", "玉簪", "玉钗", "玉带", "玉佩",
        "金印", "金章", "金符", "金令", "金剑", "金刀", "金枪", "金戟",
        "银镜", "银杯", "银盏", "银壶", "银盘", "银碗", "银筷", "银匙",
        "铜镜", "铜鼎", "铜炉", "铜壶", "铜盘", "铜碗", "铜筷", "铜匙"
    };
    
    // 古代服饰
    private static final String[] ANCIENT_CLOTHES = {
        "锦衣", "华服", "龙袍", "凤冠", "霞帔", "云裳", "霓裳", "羽衣",
        "罗裙", "绣裙", "锦裙", "华裙", "凤裙", "龙裙", "云裙", "霞裙",
        "绣衣", "锦衣", "华衣", "凤衣", "龙衣", "云衣", "霞衣", "羽衣",
        "绣袍", "锦袍", "华袍", "凤袍", "龙袍", "云袍", "霞袍", "羽袍"
    };
    
    // 古代建筑
    private static final String[] ANCIENT_BUILDINGS = {
        "宫殿", "楼阁", "亭台", "轩榭", "廊桥", "水榭", "花厅", "书房",
        "画室", "琴室", "棋室", "茶室", "酒室", "香室", "药室", "书房",
        "画楼", "琴楼", "棋楼", "茶楼", "酒楼", "香楼", "药楼", "书楼",
        "画阁", "琴阁", "棋阁", "茶阁", "酒阁", "香阁", "药阁", "书阁"
    };

    private static final Random random = new Random();

    /**
     * 生成随机昵称
     * @return 随机生成的中文昵称
     */
    public static String generateNickname() {
        // 随机选择两个不同的词库
        String[][] wordBanks = {
            POETIC_WORDS, IDIOM_WORDS, NOVEL_TRAITS, NATURE_SCENES,
            ELEGANT_ANIMALS, ENGLISH_TRANSLATIONS, ANCIENT_TITLES,
            ANCIENT_OBJECTS, ANCIENT_CLOTHES, ANCIENT_BUILDINGS
        };
        
        int firstBankIndex = random.nextInt(wordBanks.length);
        int secondBankIndex;
        do {
            secondBankIndex = random.nextInt(wordBanks.length);
        } while (secondBankIndex == firstBankIndex);
        
        String[] firstBank = wordBanks[firstBankIndex];
        String[] secondBank = wordBanks[secondBankIndex];
        
        // 随机选择每个词库中的词
        String firstWord = firstBank[random.nextInt(firstBank.length)];
        String secondWord = secondBank[random.nextInt(secondBank.length)];
        
        // 随机决定是否添加"的"字
        boolean addDe = random.nextBoolean();
        return addDe ? firstWord + "的" + secondWord : firstWord + secondWord;
    }

    /**
     * 生成指定数量的随机昵称
     * @param count 需要生成的昵称数量
     * @return 随机昵称数组
     */
    public static String[] generateNicknames(int count) {
        String[] nicknames = new String[count];
        for (int i = 0; i < count; i++) {
            nicknames[i] = generateNickname();
        }
        return nicknames;
    }

    /**
     * 生成指定数量的不重复随机昵称
     * @param count 需要生成的昵称数量
     * @return 不重复的随机昵称数组
     */
    public static String[] generateUniqueNicknames(int count) {
        java.util.Set<String> uniqueNicknames = new java.util.HashSet<>();
        while (uniqueNicknames.size() < count) {
            uniqueNicknames.add(generateNickname());
        }
        return uniqueNicknames.toArray(new String[0]);
    }

    public static void main(String[] args) {
        System.out.println(JSON.toJSON(RichNicknameGenerator.generateUniqueNicknames(100)));
    }
} 